/*
/*
 *https://leetcode.cn/problems/minimum-limit-of-balls-in-a-bag/submissions/570939407/
 *1760. 袋子里最少数目的球
 *medium 彭珵 2024.9.12
 *二分查找
*/

*/

class Solution {
public:
    // 函数：找到在 maxOperations 次操作后可能的最小最大值
    int minimumSize(vector<int>& nums, int maxOperations) {
        // 初始化二分查找边界
        int l = 1;  // 最小可能的最大值
        int r = *max_element(nums.begin(), nums.end());  // nums 中的最大元素
        
        // 执行二分查找
        while (l < r) {
            // 计算中点
            int mid = l + (r - l) / 2;
            int opt = 0;  // 计数器，记录所需操作次数
            
            // 计算将所有元素调整为 <= mid 所需的操作次数
            for (auto x : nums) {
                opt += (x - 1) / mid;  // 将 x 减少到 <= mid 所需的分割次数
            }
            
            // 如果所需操作超过 maxOperations，增加下界
            if (opt > maxOperations) {
                l = mid + 1;
            } else {  // 否则，减小上界
                r = mid;
            }
        }
        
        // 返回找到的最小可能最大值
        return l;
    }
};